package com.pdftest.demo;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class PdfClient {
    /**
     * byte数组转换成pdf
     *
     * @param bfile
     * @param filePath
     * @param fileName
     */
    public static void psd(byte[] bfile, String filePath, String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;

        try {
            File dir = new File(filePath);
            if (!dir.exists() && dir.isDirectory()) {//判断文件目录是否存在
                dir.mkdirs();
            }
            file = new File(filePath + "\\" + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bfile);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }


    /**
     * @param jpgPath 图片的地址
     * @param pdfPath 转换pdf的地址
     */
    public static void toPdf(String jpgPath, String pdfPath) {
        Document document = new Document();
        FileOutputStream fos = null;
        try {
            //设置pdf的输出地址
            fos = new FileOutputStream(pdfPath);
            //设置document的行间距
            document.setMargins(0, 0, 0, 0);
            //将pdf写到对应的地址
            PdfWriter.getInstance(document, fos);
            // 打开文档
            document.open();
            //读取图片
            Image image = Image.getInstance(jpgPath);
            //行宽
            float scaledWidth = image.getScaledWidth();
            //行高
            float scaledHeight = image.getScaledHeight();
            //创建一个矩形
            Rectangle rectangle = new Rectangle(scaledHeight, scaledWidth);
            //设置文档对象页面大小
            document.setPageSize(rectangle);
            //设置图片位置
            image.setAlignment(Image.ALIGN_BASELINE);
            //创建一页
            document.newPage();
            //将图片添加到document对象中
            document.add(image);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关流
            document.close();
            try {
                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }


    /**
     * @param
     * @param pdfPath PDF文件保存地址
     */
    public static void toPdfMore(String imageFolderPath, String pdfPath) {
        try {
            // 图片文件夹地址
            // String imageFolderPath = "D:/Demo/ceshi/";
            // 图片地址
            String imagePath = null;
            // PDF文件保存地址
            // String pdfPath = "D:/Demo/ceshi/hebing.pdf";
            // 输入流
            FileOutputStream fos = new FileOutputStream(pdfPath);
            // 创建文档
            Document doc = new Document(null, 0, 0, 0, 0);
            //doc.open();
            // 写入PDF文档
            PdfWriter.getInstance(doc, fos);
            // 读取图片流
            BufferedImage img = null;
            // 实例化图片
            Image image = null;
            // 获取图片文件夹对象
            File file = new File(imageFolderPath);
            File[] files = file.listFiles();
            // 循环获取图片文件夹内的图片
            for (File file1 : files) {
                if (file1.getName().endsWith(".png")
                        || file1.getName().endsWith(".jpg")
                        || file1.getName().endsWith(".gif")
                        || file1.getName().endsWith(".jpeg")
                        || file1.getName().endsWith(".tif")) {
                    // System.out.println(file1.getName());
                    imagePath = imageFolderPath + file1.getName();
                    System.out.println(file1.getName());
                    // 读取图片流
                    img = ImageIO.read(new File(imagePath));
                    // 根据图片大小设置文档大小
                    doc.setPageSize(new Rectangle(img.getWidth(), img
                            .getHeight()));
                    // 实例化图片
                    image = Image.getInstance(imagePath);
                    // 添加图片到文档
                    doc.open();
                    doc.add(image);
                }
            }
            // 关闭文档
            doc.close();
        } catch (IOException | BadElementException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        toPdfsssss("D:\\a\\", "D:\\威海导出pdf图片\\a.pdf");
    }


    /**
     * 多张图片转换成为一个pdf
     *
     * @param imageFolderPath 图片文件夹地址
     * @param pdfPath         PDF文件保存地址
     */
    public static void toPdfsssss(String imageFolderPath, String pdfPath) {
        //创建一个文档对象
        Document doc = new Document();
        try {
            // 输入流
            FileOutputStream fos = new FileOutputStream(pdfPath);
            // 写入PDF文档
            PdfWriter.getInstance(doc, fos);
            //开启文档
            doc.open();
            // 获取图片文件夹对象
            File file = new File(imageFolderPath);
            File[] files = file.listFiles();
            // 循环获取图片文件夹内的图片
            if (files != null && files.length > 0) {
                for (File f : files) {
                    if (f.getName().endsWith(".png")
                            || f.getName().endsWith(".jpg")
                            || f.getName().endsWith(".gif")
                            || f.getName().endsWith(".jpeg")
                            || f.getName().endsWith(".tif")) {
                        String imagePath = imageFolderPath + f.getName();
                        // 实例化图片
                        Image image = Image.getInstance(imagePath);
                        //设置图片居中显示
                        image.setAlignment(Image.MIDDLE);
                        // 添加图片到文档
                        doc.add(image);
                        // 换行,增加间距
                        doc.add(new Paragraph("\n"));
                    }
                }
            }
            // 关闭文档
            doc.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


}
